#include <iostream>

using namespace std;

int test(int a = 10, int b = 20) {
    return a + b;
}

//错误示例: 如果一个参数设置了默认参数，那么这个参数之后的参数都必须设置默认参数。
// int test1(int a = 10, int b)
// {
//     return a + b;
// }

//声明一个带默认参数的函数
int test2(int a = 10, int b = 20);

//如果带默认参数的函数被声明了，实现的时候不需要也不能再设置默认参数。Redefinition of default argument
//错误示例:
//int test2(int a = 10, int b = 20) { return a + b; }
//正确示例:
int test2(int a, int b) { return a + b; }

/*
    函数的默认参数:
    1、c++在声明函数原型的时可为一个或者多个参数指定默认(缺省)的参数值，当函数调用的时候如果没有指定这个值，编译器会自动用默认值代替。
    2、注意事项:
      (1)函数的默认参数从左向右，如果一个参数设置了默认参数，那么这个参数之后的参数都必须设置默认参数。
      (2)如果函数声明和函数定义分开写，函数声明和函数定义不能同时设置默认参数
 */
int main() {

    //1.如果没有传参数，那么使用默认参数
    cout << test() << endl;
    //2. 如果只传一个参数，那么第一个参数被重新赋值，而第二个参数使用默认参数
    cout << test(100) << endl;
    //3. 如果传入两个参数，那么两个参数都使用我们传入的参数
    cout << test(100, 200) << endl;

    return 0;
}
